local Workspace = game:GetService("Workspace")
local CommonOHOH = _G.CommonOHOH;
local M = CommonOHOH.class.new(script, CommonOHOH.files.BaseObject());
local level_cfg=_G.CommonOHOH.config.Level
local game_cfg=_G.CommonOHOH.config.Game

local OrbitClass=require(script.Orbit) --管道
local MineClass=require(script.Mine) --矿石
local BoxClass=require(script.Box) --宝箱

local TrackAttRoot=game.Workspace:WaitForChild("Track") -- 赛道起始点位
local lastDy=TrackAttRoot:GetAttribute("Dt")-- 多赛道之间的偏移量
local Tool=	_G.CommonOHOH.load.RngTool()


local function GetTrackAtt() --获取赛道位置
    local list=TrackAttRoot:GetDescendants()
    for _,v in pairs(list) do
        if not v:GetAttribute("isUsing") then
            v:SetAttribute("isUsing",true)
            return  v
        end
    end
   local att=Instance.new("Attachment",TrackAttRoot)
   att.CFrame=CFrame.new(lastDy*(#list))
   att:SetAttribute("isUsing",true)
    return att
end

local OrbitList=game.ReplicatedStorage.Orbit.Ordinary --管道

-- 轨道对象
function M.new(...)
	return M(...);
end;



function M.GetOneOrbitInstance(self,sortId)
    local path=self.CId.."_1_0"
    local list=OrbitList:FindFirstChild(path):GetChildren()
    local index=math.random(1,#list)
    return list[index]:Clone()
end;
-- 每个场景，存在5关
local gLevelCount=game_cfg.ChapterLevelCount

--参数：配置表中的关卡Id
function M.ctor(self,leveld)--构造函数
	M.super.ctor(self);
    local cid=math.ceil(leveld/gLevelCount)
    self.CId=cid
    self.LevelId=leveld
    self.LevelIndex=gLevelCount-(self.CId*gLevelCount-self.LevelId)
    self.cfg=level_cfg[self.LevelId]
    self.Att=GetTrackAtt()

    local sortId=1 --表示第几条管道
    self.Orbit= OrbitClass.new(self:GetOneOrbitInstance(sortId),self) --生成第一条管道
    self.Orbit:Installation(self.Att.WorldCFrame) --设置管道位置
    -- self.Orbit:SetSortId(sortId) --设置管道序列
    self.Orbit:LoadMine()--加载矿石

end;


function M.dtor(self)
    self:GetOrbit():Destroy()
    self.Att:SetAttribute("isUsing",false)
    -- if  self.OrbitList then
        -- for k,v in pairs(self.OrbitList) do
        --     v:dtor()
        -- end
    -- end
    -- self.OrbitList={}
	M.super.dtor(self);
end;



-- 车的起始位置
function M.GetCarInitCFrame(self)
    return  self.Orbit:GetCarCFrame()
end

--创建矿石 参数： 管道序列ID，管道槽位索引
function M.CreateMine(self,sortId,k)
    local gtype=Tool.RandomLucky(self.cfg.weight)

    
    if gtype==1 then --矿石
         return    MineClass.new(self:GetId(self.cfg.mine))
    elseif gtype==2 then --宝箱
         return  BoxClass.new(self:GetId(self.cfg.box))
    end
end

function M.GetId(self,data)
    local p={}
    local index2ItemId={}

    local index=1
    for k,v in pairs(data) do
        p[index]=v
        index2ItemId[index]=k
        index=index+1
    end

    local index=Tool.RandomLucky(p)
    local id=index2ItemId[index]
    return id
end

function M.GetOrbit(self)
   return self.Orbit:GetInstance()
end
return M